热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

交叉口|因果_论文笔记:GraphWaveNetforDeepSpatialTemporalGraphModeling

篇首语:本文由编程笔记#小编为大家整理,主要介绍了论文笔记:GraphWaveNetforDeepSpatial-TemporalGraphModeling相关的知识,希望对你有一定

篇首语:本文由编程笔记#小编为大家整理,主要介绍了论文笔记:Graph WaveNet for Deep Spatial-Temporal Graph Modeling相关的知识,希望对你有一定的参考价值。


IJCAI 2019


1 abstract & intro
  • 时空数据挖掘问题大多数使用邻接矩阵来建模节点之间的属性关系,这种思路的一个基本假设是:节点信息取决于自身和邻居的历史信息。      
    • 但这类模型的假设存在着一些问题:
      • 未能充分建模节点之间的依赖关系
        • 两个节点之间没有连边,但是有依赖关系
        • 两个节点虽然是邻居节点,但是没有依赖关系
      • 未能有效学习到时间的依赖关系
        • RNN:迭代传播耗时(无法并行)、存在梯度爆炸/消失的问题
        • CNN:需要迭代很多层,才能得到较大的感受野
  • ——>这篇论文提出graph Wavenet,使用自适应的邻接矩阵,在没有先验知识的情况下建模节点的空间依赖关系;同时使用扩散图卷积+空洞卷积,来解决第二个问题

2 问题定义
  • 给定图G=(V,E),其中节点集V,边集合E
    • 邻接矩阵为
    • 在某一时间步t,输入的节点信号矩阵是
  • 这篇论文的目标和一般的时空数据预测类似,给定图G和过去S步的图信号数据,预测接下来T步的图信号

3 模型部分

3.1 自适应扩散图卷积(空间依赖关系)


  • 无向图的扩散图卷积

      • ,表示某个点转移到其他点的概率
  • 有向图的扩散图卷积

      • ,表示某个点转移到其他节点的概率(正向扩散)
      • ,表示某个节点从其他节点转移过来的概率(反向扩散)
  • 上面两个主要是DCRNN的思路【论文笔记:DCRNN (Diffusion Convolutional Recurrent Neural Network: Data-Driven Traffic Forecasting)_UQI-LIUWJ的博客-CSDN博客】,本篇论文的highlight是首次引入了自适应图结构的概念,公式如下:

      • E1和E2是随机初始化的两个节点的embedding(以METR-LA为例,METR-LA有207个节点,代码 里 E1 、E2维度分别均是 (207,10))
        • 分别表示每个点作为源节点和目标节点之间的空间依赖权重
      • 使用Relu消除自适应邻接矩阵中的弱连接
      • 使用Softmax归一化自适应邻接矩阵
    • ——>可以将归一化的自适应邻接矩阵视为隐藏扩散过程的转换矩阵‘


  • 结合预定义的空间依赖关系和自适应的隐藏空间依赖关系,就有了如下的图卷积
  • 如果事先没有预定义的空间依赖关系,那么只使用自适应图卷积

3.2 时间卷积网络(时间依赖性)

使用空洞因果卷积 (dilated causal convolution)来捕获时间趋势


3.2.1 门控TCN



3.3 整体模型

 


4 实验部分

4.1 不同模型对比


4.2 不同邻接矩阵构造方式对比 


 4.3 自适应邻接矩阵可视化

论文比较了9号节点和47号节点,通过左图可以发现,9号节点这一列有值的要多一些:9号节点和更多的其他节点有影响:通过右图可以发现,确实9号节点在交叉口,47号节点就“偏远”了很多


4.4 预测结果可视化

graph wavenet和真实值更贴切一些


4.5 计算时间



  • Training的话,Graph WaveNet需要多训练两个embedding E1和E2,所以会稍微慢一些
  • 但是在inference阶段,graph wave是使用空洞卷积来进行预测的,可以一次性预测很多个未来的时间片;而DCRNN和STGCN都是使用RNN的,需要一个一个时间片迭代,故Graph WaveNet会快一些 

 


推荐阅读
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
  • 本文介绍了Java集合库的使用方法,包括如何方便地重复使用集合以及下溯造型的应用。通过使用集合库,可以方便地取用各种集合,并将其插入到自己的程序中。为了使集合能够重复使用,Java提供了一种通用类型,即Object类型。通过添加指向集合的对象句柄,可以实现对集合的重复使用。然而,由于集合只能容纳Object类型,当向集合中添加对象句柄时,会丢失其身份或标识信息。为了恢复其本来面貌,可以使用下溯造型。本文还介绍了Java 1.2集合库的特点和优势。 ... [详细]
  • 本文介绍了Python语言程序设计中文件和数据格式化的操作,包括使用np.savetext保存文本文件,对文本文件和二进制文件进行统一的操作步骤,以及使用Numpy模块进行数据可视化编程的指南。同时还提供了一些关于Python的测试题。 ... [详细]
  • linux进阶50——无锁CAS
    1.概念比较并交换(compareandswap,CAS),是原⼦操作的⼀种,可⽤于在多线程编程中实现不被打断的数据交换操作࿰ ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • This article discusses the efficiency of using char str[] and char *str and whether there is any reason to prefer one over the other. It explains the difference between the two and provides an example to illustrate their usage. ... [详细]
  • 添加环境光使正方体显示更真实
    本文介绍了如何给正方体添加环境光以使其显示更真实。通过在代码中加入环境光的计算,可以让物体的背光部分不再完全黑色,从而增加物体的真实感。代码中使用了顶点属性、光照颜色、光照方向、环境光等参数来计算物体的漫反射,并将计算结果与顶点颜色相乘得到最终的颜色。通过调整环境光的参数,可以达到不同的光照效果。 ... [详细]
  • 重入锁(ReentrantLock)学习及实现原理
    本文介绍了重入锁(ReentrantLock)的学习及实现原理。在学习synchronized的基础上,重入锁提供了更多的灵活性和功能。文章详细介绍了重入锁的特性、使用方法和实现原理,并提供了类图和测试代码供读者参考。重入锁支持重入和公平与非公平两种实现方式,通过对比和分析,读者可以更好地理解和应用重入锁。 ... [详细]
  • NotSupportedException无法将类型“System.DateTime”强制转换为类型“System.Object”
    本文介绍了在使用LINQ to Entities时出现的NotSupportedException异常,该异常是由于无法将类型“System.DateTime”强制转换为类型“System.Object”所导致的。同时还介绍了相关的错误信息和解决方法。 ... [详细]
  • 本文讨论了微软的STL容器类是否线程安全。根据MSDN的回答,STL容器类包括vector、deque、list、queue、stack、priority_queue、valarray、map、hash_map、multimap、hash_multimap、set、hash_set、multiset、hash_multiset、basic_string和bitset。对于单个对象来说,多个线程同时读取是安全的。但如果一个线程正在写入一个对象,那么所有的读写操作都需要进行同步。 ... [详细]
author-avatar
欢乐的小码农
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有